//
//  Problem1160.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/5/10.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 1160. 拼写单词
 给你一份『词汇表』（字符串数组） words 和一张『字母表』（字符串） chars。

 假如你可以用 chars 中的『字母』（字符）拼写出 words 中的某个『单词』（字符串），那么我们就认为你掌握了这个单词。

 注意：每次拼写（指拼写词汇表中的一个单词）时，chars 中的每个字母都只能用一次。

 返回词汇表 words 中你掌握的所有单词的 长度之和。

 示例 1：
     输入：words = ["cat","bt","hat","tree"], chars = "atach"
     输出：6
     解释：
     可以形成字符串 "cat" 和 "hat"，所以答案是 3 + 3 = 6。
 示例 2：
     输入：words = ["hello","world","leetcode"], chars = "welldonehoneyr"
     输出：10
     解释：
     可以形成字符串 "hello" 和 "world"，所以答案是 5 + 5 = 10。
 提示：
     1 <= words.length <= 1000
     1 <= words[i].length, chars.length <= 100
     所有字符串中都仅包含小写英文字母
 */
@objcMembers class Problem1160: NSObject {
    func solution() {
        print(countCharacters(["cat","bt","hat","tree"], "atach"))
        print(countCharacters(["hello","world","leetcode"], "welldonehoneyr"))
    }
    /*
     1: 创建一个字典dic，存储charts的字符的数量
     2: 遍历words，然后把每个word也存储到一个字典当中，然后看看每个字符的数量是否满足在dic中
     */
    func countCharacters(_ words: [String], _ chars: String) -> Int {
        // 1: 统计charts每个字符的数量
        var dic:[Character: Int] = [:]
        for c in chars {
            dic[c, default: 0] += 1
        }
        
        var result = 0
        for word in words {
            // 2: 统计每个word中字符的数量
            var wDic:[Character: Int] = [:]
            for c in word {
                wDic[c, default: 0] += 1
            }
            
            // 看看word是否都在dic中
            var isAll = true
            for c in wDic.keys {
                if dic[c] == nil || dic[c]! < wDic[c]! {
                    isAll = false
                    break
                }
            }
            if isAll == true {
                result += word.count
            }
        }
        return result
    }
}
